/**
 * fetchInstance fetch实例
 * fetchOptions fetch参数
 */
function useRequestPlugin(fetchInstance, fetchOptions) {
  return {
    /**
     * onBefore 执行异步之前的钩子
     *  入参:
     *    params 异步处理函数的入参
     *  返回：
     *    stopNow   停止后续流程
     *    returnNow 更新 state 后直接结束
     *    ...state  返回的 state
     */
    onBefore(params) {
      const state = {};
      return {
        stopNow: false,
        returnNow: false,
        ...state,
      };
    },
    /**
     * onRequest 执行异步的钩子
     *  入参:
     *    service 异步处理函数
     *    params  异步处理函数的入参
     *  返回：
     *    servicePromise  返回处理后的新的异步执行器
     */
    onRequest(service, params) {
      return {
        servicePromise: service,
      };
    },
    /**
     * onSuccess 执行异步成功的钩子
     *  入参:
     *    res 异步处理成功后的数据
     *    params  异步处理函数的入参
     *  返回：
     */
    onSuccess(res, params) {},
    /**
     * onError 执行异步失败的钩子
     *  入参:
     *    error 异步处理失败后的原因
     *    params  异步处理函数的入参
     *  返回：
     */
    onError(error, params) {},
    /**
     * onFinally 执行异步完成的钩子
     *  入参:
     *    params  异步处理函数的入参
     *    res 异步处理成功后的数据
     *    error 异步处理失败后的原因
     *  返回：
     */
    onFinally(params, res, error) {},
    /**
     * onCancel 取消异步钩子
     *  入参:
     *    params  异步处理函数的入参
     *    res 异步处理成功后的数据
     *    error 异步处理失败后的原因
     *  返回：
     */
    onCancel() {},
    /**
     * onMutate 立即更新钩子
     *  入参:
     *    data 立即更新 state 中的 data
     *  返回：
     */
    onMutate(data) {},
  };
}

/**
 * onInit 初始化静态钩子
 * 入参: fetchOptions fetch参数
 * 返回: initState 初始化的state
 */
useRequestPlugin.onInit = ({ name }) => {
  console.log(name, "onInit");
  return { name };
};
export default useRequestPlugin;
